const db = wx.cloud.database()

Page({
  data: {
    dormitoryId:0,
    tempImg: [],
    fileIDs: [],
    name: '',
    amount: '',
    remark: ''
  },
  submit: function () {
    wx.showLoading({
      title: '提交中',
    })
    const promiseArr = []

    // 获取输入框的值
    const name = this.data.name
    const amount = parseFloat(this.data.amount) // 转换为浮点数
    const remark = this.data.remark

    // 检查必填项
    if (!name || !amount) {
      wx.showToast({
        title: '名字和金额为必填项',
        icon: 'none',
        duration: 2000
      })
      wx.hideLoading()
      return
    }

    // 只能一张张上传 遍历临时的图片数组
    for (let i = 0; i < this.data.tempImg.length; i++) {
      let filePath = this.data.tempImg[i]
      let suffix = /\.[^\.]+$/.exec(filePath)[0]; // 正则表达式，获取文件扩展名

      // 判断该图片是否已经上传过
      if (this.data.fileIDs.includes(filePath)) {
        continue;
      }

      // 在每次上传的时候，就往promiseArr里存一个promise，只有当所有的都返回结果时，才可以继续往下执行
      promiseArr.push(new Promise((resolve, reject) => {
        wx.cloud.uploadFile({
          cloudPath: new Date().getTime() + suffix,
          filePath: filePath, // 文件路径
        }).then(res => {
          // get resource ID
          console.log(res.fileID)
          this.setData({
            fileIDs: this.data.fileIDs.concat(res.fileID)
          })
          resolve()
        }).catch(error => {
          console.log(error)
        })
      }))
    }
    const now = new Date();
    const time = now.toLocaleString();

    Promise.all(promiseArr).then(res => {
      // 如果有 itemId，则是更新操作，否则就是添加操作
      if (this.data.itemId) {
        db.collection('items_image').doc(this.data.itemId).update({
          data: {
            dormitoryId: this.data.dormitoryId,
            fileIDs: this.data.fileIDs,
            name: name,
            amount: amount,
            remark: remark,
            time: time
          }
        }).then(res => {
          console.log(res)
          wx.hideLoading()
          wx.showToast({
            title: '更新成功',
          })
          // 更新成功后返回上一页
          wx.navigateBack()
        }).catch(error => {
          console.log(error)
          wx.hideLoading()
          wx.showToast({
            title: '更新失败，请重试',
          })
        })
      } else {

        db.collection('items_image').add({
          data: {
            dormitoryId: this.data.dormitoryId,
            fileIDs: this.data.fileIDs,
            name: name,
            amount: amount,
            remark: remark,
            time: time
          }
        }).then(res => {
          console.log(res)
          wx.hideLoading()
          wx.showToast({
            title: '保存成功',
          })
          // 保存成功后返回上一页
          this.onLoad()
        }).catch(error => {
          console.log(error)
          wx.hideLoading()
          wx.showToast({
            title: '保存失败，请重试',
          })
        })
      }
    })
  },
  uploadImgHandle: function () {
    wx.chooseImage({
      count: 9 - this.data.tempImg.length, // 计算还能选择的图片数量
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success: res => {
        // tempFilePath可以作为img标签的src属性显示图片
        const tempFilePaths = res.tempFilePaths
        this.setData({
          tempImg: this.data.tempImg.concat(tempFilePaths) // 合并新选择的图片路径
        })
      }
    })
  },
  deleteImg: function (event) {
    const index = event.currentTarget.dataset.index;
    const tempImg = this.data.tempImg;
    const fileIDs = this.data.fileIDs;

    // 如果删除的是已上传的图片，则在fileIDs中也将其删除
    if (fileIDs.includes(tempImg[index])) {
      fileIDs.splice(fileIDs.indexOf(tempImg[index]), 1);
      this.setData({
        fileIDs: fileIDs
      });
    }

    tempImg.splice(index, 1); // 从数组中移除对应索引的图片路径
    this.setData({
      tempImg: tempImg,
    });
  },
  DateChange(e) {
    this.setData({
      date: e.detail.value
    })
  },
  // 更新名称
  updateName: function (event) {
    const value = event.detail.value;
    if (value.length > 10) {
      wx.showToast({
        icon: 'none',
        title: '名字不得超过10个字符',
      })
      return;
    }
    this.setData({
      name: value
    })
  },

  // 更新金额
  updateAmount: function (event) {
    this.setData({
      amount: event.detail.value
    })
  },
  // 更新备注
  updateRemark: function (event) {
    const value = event.detail.value;
    if (value.length > 30) {
      wx.showToast({
        icon: 'none',
        title: '备注不得超过30个字符',
      })
      return;
    }
    this.setData({
      remark: value
    })
  },

  onLoad: function (options) {
    const app = getApp(); // 获取小程序实例
    const dormitoryId = app.globalData.dormitoryId; 
    console.log(dormitoryId);
    this.setData({
      dormitoryId:dormitoryId
    });
    const selectedItem = options && options.item ? JSON.parse(options.item) : {};
    const itemId = options && options.id ? options.id : '';

    // 将传递过来的信息设置到页面的数据中
    this.setData({
      itemId: itemId,
      name: selectedItem.name || '', // 使用空字符串作为默认值
      amount: selectedItem.amount || '', // 使用空字符串作为默认值
      remark: selectedItem.remark || '', // 使用空字符串作为默认值
      fileIDs: selectedItem.fileIDs || [], // 使用空数组作为默认值
      tempImg: [],
      namePlaceholder: '请输入名字',
      amountPlaceholder: '0.00',
      remarkPlaceholder: '请输入备注'
    });
    // 将 fileIDs 存入 tempImg 数组
    this.setData({
      tempImg: this.data.fileIDs
    });
  },

})